package com.relatev.minecraft.TRMobAPI;

import java.util.ArrayList;
import org.bukkit.entity.Entity;
import org.bukkit.scheduler.BukkitTask;

public class TRAbility {

    public final TRMob ParentTRMob = null;
    @TRFieldConfigurable
    public final String ID;
    private final ArrayList<BukkitTask> Tasks = new ArrayList<>();

    /**
     * 传回创建一个能力所必需的参数
     *
     * 能力的ID必须为类名，这不可更改
     */
    public TRAbility() {
        ID = this.getClass().getName();
    }
    
    /**
     * 应将任何Task传回TRAbility，以便热拔插 不传回将导致热拔插系统出现问题
     *
     * @param bt 由BukkitScheduler的Task
     */
    public void loginBukkitTask(BukkitTask bt) {
        Tasks.add(bt);
    }

    /**
     * 当技能被启用时触发，此时你可以初始化，比如注册监听器
     *
     */
    public void onLoad() {
    }
    
    /**
     * 当技能卸载时触发，此时你应该卸载监听器，去掉遗留效果
     *
     */
    public void onUnload(){
    }
    
    /**
     * 当装载此技能的怪物被生成
     * @param ent 生成的实体
     */
    public void onSpawn(Entity ent){
        
    }

    @Override
    public int hashCode() {
        return 664015345;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (obj instanceof TRAbility == false) {
            return false;
        }
        final TRAbility other = (TRAbility) obj;
        return other.getClass().equals(this.getClass());
    }

    @Override
    public String toString() {
        return TRAbility.class.getName() + "-" + ParentTRMob.ID;
    }
}
